#include "factory.h"
//#define FILENAME "file"
//#define FILENAME "116.day36-线程池2.mp4"
#define FILENAME "108.day32-epoll的边沿触发与非阻塞-select与epoll的对比.mp4"
void sigfunc(int signum)
{
    printf("Get signum %d\n",signum);
    sleep(6);
}
int trans_file(int newfd)
{
    signal(SIGPIPE,sigfunc);
    train_t dt;//dataTrain
    //发送文件名
    dt.dataLen=strlen(FILENAME);
    strcpy(dt.buf,FILENAME);
    send(newfd,&dt,sizeof(dt.dataLen)+dt.dataLen,0);
    //发送文件大小
    struct stat buf;
    stat(FILENAME,&buf);
    dt.dataLen=sizeof(buf.st_size);
    memcpy(dt.buf,&buf.st_size,dt.dataLen);
    send(newfd,&dt,sizeof(dt.dataLen)+dt.dataLen,0);
    //发送文件
    int fd=open(FILENAME,O_RDONLY);
    while((dt.dataLen=read(fd,dt.buf,sizeof(dt.buf))))
    {
        //bzero(&dt,sizeof(dt));
        //这里不需要清空结构体，因为要传送的文件本身带结束符
        send(newfd,&dt,sizeof(dt.dataLen)+dt.dataLen,0);
    }
    //发送结束信号
    dt.dataLen=0;
    send(newfd,&dt,4,0);
    close(newfd);
    return 0;
}

